import Axios, { AxiosError } from 'axios'
import { Notification, Loading } from 'element-ui'
// import transData from './transData.js'
import { transData, transPager } from './transData.js'
import router from '@/router'

let service
const reqInstance = Axios.create({
  baseURL: '/api',
  timeout: 5000,
  transformResponse: [transPager, transData],
  // transformResponse: [transData]
  // transformResponse:[(dataStr)=>{
  //   let obj = JSON.parse(dataStr)
  //   let tmp = obj // 两个引用指向相同数据
  //   while (tmp.data)  tmp = tmp.data // data的指针下移
  //   // 使用最后一个data
  //   obj.data = tmp;
  //   console.log('obj.data',obj.data);
  //   return obj;
  // }],
})

// 拦截器 要么 return 参数  要么 return Promise 后续.resolve() 调用的时候就能继续这次拦截的行为
reqInstance.interceptors.request.use((config) => {
  if (config.fullLoading) {
    service = Loading.service() // 显示loading
  }
  let token = window.sessionStorage.getItem('token')
  if (token) {
    config.headers['token'] = token
  }
  return config
})

reqInstance.interceptors.response.use(
  (response) => {
    if (response.config.fullLoading) {
      service.close() // 关闭loading
    }
    // 存储token
    let token = response?.data?.data?.token
    // console.log('token：', token);
    if (token) {
      window.sessionStorage.setItem('token', token)
    }
    // 业务异常
    // code === 200
    // else if code === 401
    // else if code === 603 token过期
    if (response?.data?.code === 20000) {
      console.log('请求成功', response.config.url)
    } else if (response?.data?.code === 401 || response?.data?.code === 603) {
      // 行为 replace:
      router.replace({
        // 404页面
        name: 'privilege',
      })
    } else {
      if (response?.data instanceof Blob) {
      } else {
        Notification.error(response?.data?.data)
      }
    }
    // 业务code处理
    return response
  },
  (err) => {
    // Axios 的err
    if (err instanceof AxiosError) {
      console.log('AxiosError', err)
      if (err.config.fullLoading) {
        service.close()
      }
    } else if (err instanceof Error) {
      console.log('SyntaxError', err)
    }
    // service.close() // 关闭loding
    // 提示 非200的状态码  404 500
    console.log(err, 'err')
    ;('')
    Notification.error(err.message)
    // 返回一个reject的Promise
    return Promise.reject(err) // 错误处理就这么写
  }
)

export default reqInstance
